home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Run Magazine ReRun 1989 Special Issue
/
rerun-1989-special-issue.d64
/
irq source#4
< prev
next >
Wrap
Text File
|
2022-09-20
|
3KB
|
107 lines
*=$C000
; ****ALARM CLOCK****
; TOD CLOCK ALARM DEMO
;
SEI ; Set Interrupt Disable Flag
LDA #<NEWIRQ ; Change RAM IRQ Vector
STA $0314
LDA #>NEWIRQ
STA $0315
CLI ; Clear Interrupt Disable Flag
RTS
NEWIRQ
BIT $DC0B ; Test AM/PM flag
BMI PM ; If not PM...
LDA #$81 ; Get a reverse "A"
BNE APFLAG ; Jump ahead
PM
LDA #$90 ; Get a reverse "P"
APFLAG
STA $0427 ; Put character in upper left corner
LDA $DC0B ; Get first digit of HOURS
AND #$10 ;
BEQ HOUR0 ; Check if it is "0"
LDA #$B1 ; Get a reverse "1"
BNE D1H ; Jump ahead
HOUR0
LDA #$B0 ; Get a reverse "0"
D1H
STA $041D ; Put up first digit on screen
LDA $DC0B ; Get second digit of HOURS
AND #$0F ; Mask out bits 4-7
ORA #$B0 ; Add on #$B0 to get reverse number
STA $041E ; Put up second digit
LDA #$BA ; Get a reverse ":"
STA $041F ; Put on screen
LDA $DC0A ; Get first digit of MINUTES
AND #$70 ; Save bits 4-6
LSR ; Shift right 4 bits
LSR
LSR
LSR
ORA #$B0 ; Get reverse character
STA $0420
LDA $DC0A ; get second digit of MINUTES
AND #$0F
ORA #$B0
STA $0421
LDA #$BA
STA $0422
LDA $DC09 ; Do the same for SECONDS
AND #$70
LSR
LSR
LSR
LSR
ORA #$B0
STA $0423
LDA $DC09
AND #$0F
ORA #$B0
STA $0424
LDA #$AE ; Get a reverse "."
STA $0425 ; Put on the screen
LDA $DC08 ; Get Tenth of seconds
AND #$0F
ORA #$B0
STA $0426 ; Put on screen
LDA $DC0D ; Check ICR if interrupt
; is from the Alarm
AND #$84 ; Check bits 7 and 2
CMP #$84
BEQ ALARM ; If both are set, sound alarm
JMP $EA31 ; Go to KERNAL IRQ routine
ALARM
LDX #$10 ; Setup for Alarm (16 loops)
LDY #$00 ; Set Delay Counters
STY $02
LDA #$20 ; Set up SID chip
STA $D400 ; FREQ Lo
STA $D401 ; Freq Hi
LDA #$0F
STA $D418 ; Volume
LDA #$00
STA $D406 ; S/R
LDA #$29
STA $D405 ; A/D
ALOOP1
LDA #$11 ; Main Alarm LOOP
STA $D404 ; Turn on Triangle Waveform
ALOOP2
DEY ; Delay LOOP
BNE ALOOP2
DEC $02
BNE ALOOP2
DEC $D020 ; Decrement border color
DEC $D021 ; Decrement background color
LDA #$10 ; Turn off voice 1
STA $D404
DEX ; Decrement LOOP counter
BNE ALOOP1 ; If not done, do it again
PLA ; Restore registers from the stack
TAY
PLA
TAX
PLA
RTI ; Return to program